const http = require("../../../utils/https");
// 获取小程序全局实例
const app = getApp(); 

Page({
  data: {
    myBills: [],        // 原始账单列表（接口返回完整数据）
    unpaidBills: [],    // 未缴费账单
    paidBills: [],      // 已缴费账单
    hasUnpaidBills: false, 
    hasPaidBills: false,
    loading: true,      // 加载状态
    error: '',          // 错误信息
    
    // 新增缴费相关数据
    customPayments: [], // 自定义缴费项目列表
    showAddModal: false, // 是否显示新增弹窗
    newPayment: {       // 新增缴费表单数据
      title: '',
      amount: '',
      description: '',
      typeIndex: 0
    },
    paymentTypes: ['物业费', '电费', '水费', '燃气费', '宽带费', '暖气费', '车位费', '其他'],
    quickAddItems: [
      { type: 'property', name: '物业费', icon: '🏢' },
      { type: 'electricity', name: '电费', icon: '⚡' },
      { type: 'water', name: '水费', icon: '💧' },
      { type: 'gas', name: '燃气费', icon: '🔥' },
      { type: 'internet', name: '宽带费', icon: '🌐' },
      { type: 'heating', name: '暖气费', icon: '🌡️' },
      { type: 'parking', name: '车位费', icon: '🚗' },
      { type: 'other', name: '其他', icon: '📋' }
    ]
  },

  onLoad() {
    this.getMyBills();
    this.loadCustomPayments();
  },

  onShow() {
    // 若从支付页回来，且标记需要刷新，则重新拉取
    const shouldRefresh = wx.getStorageSync('shouldRefreshPaymentList');
    if (shouldRefresh) {
      wx.removeStorageSync('shouldRefreshPaymentList');
      this.getMyBills();
      this.loadCustomPayments();
      return;
    }
    this.getMyBills(); // 页面显示时刷新数据
    this.loadCustomPayments();
  },

  // 获取账单列表（核心逻辑，带 Token 验证）
  getMyBills() {
    this.setData({ loading: true, error: '' });
    // 从 Storage 中获取 Token
    const token = wx.getStorageSync('token'); 
    if (!token) {
      this.handleError('未检测到登录态，请重新登录');
      this.setData({ loading: false });
      return;
    }

    // 从全局变量中获取 residentId
    const residentId = app.globalData.residentId;

    wx.request({
      url: `${app.globalData.baseUrl}/bilManagement/bilManagement/list`, // 使用全局 baseUrl
      method: 'GET',
      data: {
        residentId: residentId, // 传递全局变量中的 residentId
      },
      header: {
        // 若依项目通常用 Authorization 传递 Token，格式一般为 Bearer + 空格 + Token
        'Authorization': `Bearer ${token}` 
      },
      success: (res) => {
        console.log('接口返回完整数据:', res.data);
        // 校验接口返回格式
        if (res.data && res.data.code === 200 && res.data.rows) {
          const bills = res.data.rows; // 接口返回的账单数组
          this.processBills(bills);    // 处理数据并渲染
        } else {
          this.handleError('接口返回数据异常');
        }
      },
      fail: (err) => {
        console.error('请求失败:', err);
        if (err.statusCode === 401) {
          // 若依项目 Token 失效一般返回 401，做清除 Token 等处理
          wx.removeStorageSync('token');
          wx.removeStorageSync('userInfo');
          this.handleError('登录态失效，请重新登录');
        } else {
          this.handleError('网络请求失败，请检查后端服务');
        }
      },
      complete: () => {
        this.setData({ loading: false });
      }
    });
  },

  // 处理账单数据（分离已缴费/未缴费）
  processBills(bills) {
    // 格式化账单：映射接口字段到页面需要的属性
    const formatted = bills.map(bill => ({
      id: bill.id,
      billName: bill.billName,          // 账单名称（如"5月物业费"）
      paymentStatus: bill.paymentStatus, // 缴费状态（0=未缴费，1=已缴费）
      chargeScope: bill.chargeScope,    // 收费范围（如"物业管理费"）
      totalAmount: bill.totalAmount,    // 费用金额
      chargeStartTime: bill.chargeStartTime, // 收费开始时间
      chargeEndTime: bill.chargeEndTime,   // 收费结束时间
      paymentMethod: bill.paymentMethod?.methodName || '未知', // 缴费方式
      residentName: bill.residentInfo?.residentName || '未知住户', // 住户姓名
      houseNumber: bill.houseInfo?.houseNumber || '未知房号'    // 房号
    }));

    // 分离已缴费和未缴费账单
    const unpaid = formatted.filter(item => item.paymentStatus === 0);
    const paid = formatted.filter(item => item.paymentStatus === 1);

    this.setData({
      myBills: formatted,
      unpaidBills: unpaid,
      paidBills: paid,
      hasUnpaidBills: unpaid.length > 0,
      hasPaidBills: paid.length > 0
    });
  },

  // 错误处理（统一提示）
  handleError(msg) {
    this.setData({
      error: msg,
      myBills: [],
      unpaidBills: [],
      paidBills: []
    });
  },

  // 跳转到账单详情或充值界面
  onBillItemTap(e) {
    const billId = e.currentTarget.dataset.id;
    const bill = this.data.myBills.find(item => item.id === billId);
    
    if (bill && bill.paymentStatus === 0) {
      // 未缴费账单，跳转到充值界面
      wx.navigateTo({
        url: `/service/pages/property/property?billId=${billId}&amount=${bill.totalAmount}&billName=${encodeURIComponent(bill.billName)}`
      });
    } else {
      // 已缴费账单，跳转到详情页面
      wx.navigateTo({
        url: `/service/pages/property/property?billId=${billId}`
      });
    }
  },

  // 返回上一页
  goBack() {
    wx.navigateBack({ delta: 1 });
  },

  // 下拉刷新
  onPullDownRefresh() {
    this.getMyBills();
    this.loadCustomPayments();
    wx.stopPullDownRefresh();
  },

  // 日期格式化（可选：如需更复杂的格式化可扩展）
  formatDate(dateString) {
    if (!dateString) return '';
    return new Date(dateString).toLocaleDateString();
  },

  // ========== 新增缴费相关方法 ==========
  
  // 加载自定义缴费项目
  loadCustomPayments() {
    const customPayments = wx.getStorageSync('customPayments') || [];
    this.setData({ customPayments });
  },

  // 显示新增缴费弹窗
  showAddPaymentModal() {
    this.setData({ 
      showAddModal: true,
      newPayment: { title: '', amount: '', description: '', typeIndex: 0 }
    });
  },

  // 隐藏新增缴费弹窗
  hideAddPaymentModal() {
    this.setData({ showAddModal: false });
  },

  // 阻止弹窗内部点击事件冒泡
  preventBubble() {},

  // 表单输入处理
  onTitleInput(e) {
    this.setData({ 'newPayment.title': e.detail.value });
  },

  onAmountInput(e) {
    this.setData({ 'newPayment.amount': e.detail.value });
  },

  onDescriptionInput(e) {
    this.setData({ 'newPayment.description': e.detail.value });
  },

  onTypeChange(e) {
    this.setData({ 'newPayment.typeIndex': e.detail.value });
  },

  // 快捷添加缴费项目
  quickAddPayment(e) {
    const type = e.currentTarget.dataset.type;
    const item = this.data.quickAddItems.find(item => item.type === type);
    
    this.setData({
      showAddModal: true,
      newPayment: {
        title: item.name,
        amount: '',
        description: '',
        typeIndex: this.data.paymentTypes.indexOf(item.name)
      }
    });
  },

  // 确认添加缴费项目
  confirmAddPayment() {
    const { title, amount, description, typeIndex } = this.data.newPayment;
    
    if (!title.trim()) {
      wx.showToast({ title: '请输入缴费名称', icon: 'none' });
      return;
    }
    
    if (!amount || parseFloat(amount) <= 0) {
      wx.showToast({ title: '请输入有效金额', icon: 'none' });
      return;
    }

    const newPayment = {
      id: Date.now().toString(),
      title: title.trim(),
      amount: parseFloat(amount).toFixed(2),
      description: description.trim() || '自定义缴费项目',
      type: this.data.paymentTypes[typeIndex],
      icon: this.getIconByType(this.data.paymentTypes[typeIndex]),
      status: 'pending',
      createTime: new Date().toISOString()
    };

    const customPayments = [...this.data.customPayments, newPayment];
    wx.setStorageSync('customPayments', customPayments);
    
    this.setData({ 
      customPayments,
      showAddModal: false
    });

    wx.showToast({ title: '添加成功', icon: 'success' });
  },

  // 根据类型获取图标
  getIconByType(type) {
    const iconMap = {
      '物业费': '🏢',
      '电费': '⚡',
      '水费': '💧',
      '燃气费': '🔥',
      '宽带费': '🌐',
      '暖气费': '🌡️',
      '车位费': '🚗',
      '其他': '📋'
    };
    return iconMap[type] || '📋';
  },

  // 点击自定义缴费项目
  onCustomPaymentTap(e) {
    const id = e.currentTarget.dataset.id;
    const payment = this.data.customPayments.find(item => item.id === id);
    
    if (payment) {
      wx.showModal({
        title: '缴费确认',
        content: `确认缴纳 ${payment.title} ¥${payment.amount}？`,
        success: (res) => {
          if (res.confirm) {
            this.processCustomPayment(payment);
          }
        }
      });
    }
  },

  // 处理自定义缴费
  processCustomPayment(payment) {
    wx.showLoading({ title: '缴费中...' });
    
    setTimeout(() => {
      wx.hideLoading();
      
      // 更新缴费状态
      const customPayments = this.data.customPayments.map(item => {
        if (item.id === payment.id) {
          return { ...item, status: 'paid', paymentTime: new Date().toISOString() };
        }
        return item;
      });
      
      wx.setStorageSync('customPayments', customPayments);
      this.setData({ customPayments });
      
      wx.showToast({ title: '缴费成功', icon: 'success' });
    }, 1500);
  }
});